小编典典

引用类型的定义是什么?

all

您如何以正式和严格的方式定义(解释)什么是 C++ 中的引用类型?

我试图用谷歌搜索,并查看了 Stroustrup 的“C++ 编程语言”,但我在那里没有看到这个概念的定义。


阅读 215

收藏
2022-04-04

共1个答案

小编典典

引用是一个别名,是一个对象的替代名称。它本身不是对象(因此*也不*是指针,即使它们的某些用途与指针的用途重叠)。

引用对它们的处理有一定的限制,这与它们的非对象性有关。例如,您不能创建引用数组。一旦声明它们,它们就必须被初始化(绑定,就位),因为如果没有对象别名,它们就不可能存在。

但是,您可以存储它们,它们遵循自动变量或成员变量的规则。它们的用途之一是戳穿 C++ 的按值传递函数调用。

请注意,const 引用作为别名有一个简洁的副作用:当绑定到一个临时(即未命名的)对象时,它们为该对象命名,因此将其生命周期延长到引用本身的生命周期。

{ // Block scope
     Foo fooVal = makeFoo(); // Say makeFoo() returns a (temporary, unnamed) Foo
     // Here the temporary Foo is dead (fooVal is a copy).

     // Foo &fooRef = makeFoo(); // Error, reference is non-const
     Foo const &fooCRef = makeFoo(); // All good

     // ...

     // The second temporary is still alive
     fooCRef.doSomethingFunny(); // Works like a charm !

} // The second temporary dies with fooRef

但请注意,有可能(尽管是人为的)使对象超出范围而引用仍指向它。然后,您将拥有不再使用的悬空引用(这样做将是未定义的行为)。

Foo *fooPtr = new Foo; // Here is a Foo
Foo &fooRef = *fooPtr; // Here is an alias for that Foo

delete fooPtr; // Here is the end of that Foo's life

fooRef.doSomethingFunny(); // Here comes trouble...
2022-04-04